/*
 * ParametroConstructorBase.java
 * Copyright 2010 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 30/11/2010, 11:15:16 AM
 */

package com.ufps.cuatro.util.base;

import java.io.Serializable;

/**
 * <i><b>ParametroConstructorBase:</b></i>Esta Clase es la base para la creación de los
 * parametros de los constructores de los controles swing.
 *
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 30/11/2010
 * @see Serializable
 * @see Cloneable
 * @see Comparable
 */
public class ParametroConstructorBase implements Serializable, Cloneable, Comparable{
    private static final long serialVersionUID = -5481567873767352845L;

    private int id;
    private String classpath;
    private String value;
    private boolean primitive;
    private boolean array;
    private ConstructorBase objConstructor;    

    /**
     * Constructor por Defecto.
     * @param id @DescripcionParametro
     * @param classpath @DescripcionParametro
     * @param value @DescripcionParametro
     * @param primitive @DescripcionParametro
     * @param array @DescripcionParametro
     * @param objConstructor @DescripcionParametro
     */
    public ParametroConstructorBase(int id, String classpath, String value, boolean primitive, boolean array, ConstructorBase objConstructor) {
        this.id = id;
        this.classpath = classpath;
        this.value = value;
        this.primitive = primitive;
        this.array = array;
        this.objConstructor = objConstructor;
    }

    /**
     * Indica si el Parametro es un Array.
     * @return estado de Parametro que indica si es un array.
     */
    public boolean isArray() {
        return array;
    }

    /**
     * Devuelve el classpath o cadena de definición del Tipo de dato.
     * @return El Classpath
     */
    public String getClasspath() {
        return classpath;
    }

    /**
     * El indice dentro del archivo de Propiedades.
     * @return Indice de definición.
     */
    public int getId() {
        return id;
    }

    /**
     * Devuelve el Objeto Constructor al cual pertenece el Parametro.
     * @return Objeto Constructor.
     */
    public ConstructorBase getObjConstructor() {
        return objConstructor;
    }

    /**
     * Indica si el Parametro es un tipo de dato Primitivo.
     * @return estado la Parametro que indica si es un tipo de dato Primitivo.
     */
    public boolean isPrimitive() {
        return primitive;
    }   

    /**
     * Devuelve el Valor del Parametro, este campo se incializa por defecto si el
     * Parametro lo requiere.
     * @return Valor por defecto del Parametro.
     */
    public String getValue() {
        return value;
    }

    @Override
    public String toString() {
        return "ParametroBase : " + id + " ClassPath : " + classpath + " de :" + this.objConstructor.toString();
    }

    @Override
    public int compareTo(Object o) {
        try{
            ParametroConstructorBase obj = (ParametroConstructorBase) o;
            if(this.id > obj.id)
                return 1;
            else if(this.id < obj.id)
                return -1;
            else
                return 0;
        }catch(java.lang.Exception ex){}
        return 0;
    }

}
